from fastapi import FastAPI  # 导入FastAPI框架
from fastapi.middleware.cors import CORSMiddleware  # 导入CORS中间件
from fastapi.exceptions import RequestValidationError  # 导入请求验证异常
from starlette.exceptions import HTTPException as StarletteHTTPException  # 导入HTTP异常

from app.db_models import user, detection, verification_code  # 导入模型
from app.database import engine, Base  # 导入数据库引擎和基类
from app.routers import user as user_router  # 导入用户路由
from app.routers import detection as detection_router  # 导入检测路由
from app.routers import password_reset as password_reset_router  # 导入密码重置路由
from app.api.exception_handler import (  # 导入异常处理器
    validation_exception_handler,
    http_exception_handler,
    general_exception_handler
)

# 创建数据库表
# 此处使用SQLAlchemy的元数据创建所有在Base中定义的表
Base.metadata.create_all(bind=engine)

# 创建FastAPI应用实例
app = FastAPI(
    title="智能漏洞入侵检测系统",  # 应用标题
    description="保护您的系统安全，实时监控，智能预警",  # 应用描述
    version="1.0.0"  # 应用版本
)

# 添加CORS中间件
# 允许跨域资源共享，使前端可以安全地调用API
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许的源，生产环境应该设置为特定域名
    allow_credentials=True,  # 允许凭证（如cookie）
    allow_methods=["*"],  # 允许的HTTP方法
    allow_headers=["*"],  # 允许的HTTP头
)

# 注册异常处理器
app.add_exception_handler(RequestValidationError, validation_exception_handler)
app.add_exception_handler(StarletteHTTPException, http_exception_handler)
app.add_exception_handler(Exception, general_exception_handler)

# 添加路由
# 将用户路由添加到应用中
app.include_router(user_router.router)
# 将检测路由添加到应用中
app.include_router(detection_router.router)
# 将密码重置路由添加到应用中
app.include_router(password_reset_router.router)


@app.get("/")
def read_root():
    """首页路由
    
    返回欢迎信息
    
    Returns:
        dict: 包含欢迎消息的字典
    """
    return {"message": "欢迎使用智能漏洞入侵检测系统 API"}